//  用户模块的store, 后期自己实现 , 这里面的代码有参考价值 后期在写这个模块的时候
//  打开源码对比梳理
import { setToken, getToken, removeToken } from '@/utils/auth'
import { reqLogin, reqGetUserInfo, reqGetUserDetailById } from '@/api/user'
const state = {
  token: getToken() || null,
  userInfo: {} // 个人信息
}

const mutations = {
  // 设置token的mutation
  setToken(state, token) {
    state.token = token
    // 存储在web存储(localStorage和sessionStorage)
    // 将token持久化存储在cookie中
    setToken(token)
  },
  // 设置个人信息的mutation
  setUserInfo(state, userInfo) {
    state.userInfo = userInfo
  },
  // 清除个人信息
  removeUserInfo(state) {
    state.userInfo = {}
  },
  // 清除token
  removeToken(state) {
    state.token = null // 清除vuex中
    removeToken() // 清除本地
  }
}

const actions = {

  async login({ commit }, userInfo) {
    // 在这个action发送登录的请求
    const res = await reqLogin(userInfo)
    // 触发setToken这个mutation
    commit('setToken', res.data)
    console.log(res)
    // 这个return 是保证login.vue文件中接收到响应结果, 页面弹框提示的
    return res
  },
  // 获取个人信息的axtion
  async getUserInfo({ commit }) {
    // 发送请求
    const { data } = await reqGetUserInfo()// 员工信息 只有几个字段
    console.log(111111, data)
    const { data: data2 } = await reqGetUserDetailById(data.userId) // 员工详细信息 这个结果是包含第一个的结果的
    console.log(data.userId, data2)
    const result = { ...data, ...data2 }
    // 再去提交存储个人信息的mutation
    commit('setUserInfo', result)
    console.log(result)
    return result // 将这个res return出来 后期要做权限处理
  },
  // 提交移除token和个人信息的action
  logout({ commit }) {
    commit('removeUserInfo')
    commit('removeToken')
  }

}

export default {
  // 开启命名空间
  namespaced: true,
  state,
  mutations,
  actions
}

